package com.xuxueli.commontdemo.commont.testJinZheng;//package com.xuxueli.commontdemo.commont.testJinZheng;
//
//import java.util.HashMap;
//import java.util.Map;
//
//public class TestBaoWen {
//
//    public static void main(String[] args) {
//        Map map = new HashMap();
//        String value = "232301FE393031323835303730303030303030303001001E160C0F0B061B000438393836303242363033313730303230313830340100A5";
//        // 构造函数中定义命令标识
//        HashMap commandMap = new HashMap<String, String>();
//        commandMap.put("0x01", "车辆登入");
//        commandMap.put("0x02", "实时信息上报");
//        commandMap.put("0x03", "补发信息上报");
//        commandMap.put("0x04", "车辆登出");
//        commandMap.put("0x05", "平台登入");
//        commandMap.put("0x06", "平台登出");
//        map.put("命令标识", commandMap.get("0x" + bytes[2]));
//        // 构造函数中定义应答标识
//        HashMap answerMap = new HashMap<String, String>();
//        answerMap.put("0x01", "成功");
//        answerMap.put("0x02", "错误");
//        answerMap.put("0x03", "VIN重复");
//        answerMap.put("0xFE", "命令");
//        // 解析调用
//        map.put("应答标识", answerMap.get("0x" + bytes[3]));
//        // VIN解析
//        String vin = "";
//        for(int i=4; i<=20; i++) {
//            vin += ParseUtils.hexStr2Str(bytes[i]);
//        }
//        map.put("VIN", vin);
//
//        // 构造函数中定义加密方式
//        HashMap encryptMap = new HashMap<String, String>();
//        encryptMap.put("0x01", "数据不加密");
//        encryptMap.put("0x02", "数据经过RSA算法加密");
//        encryptMap.put("0x03", "数据经过AES128位算法加密");
//        encryptMap.put("0xFE", "异常");
//        encryptMap.put("0xFF", "无效");
//        // 解析加密方式
//        String encrypt = "0x" + bytes[21];
//        map.put("加密方式", encryptMap.get(encrypt));
//        // 解析数据单元长度
//        int length = Integer.valueOf(bytes[22] + bytes[23],16);
//        map.put("数据长度", String.valueOf(length));
//        // 如果使用了加密方式
//        if(encrypt.equals("0x02") || encrypt.equals("0x03")) {
//            // 获取单元数据：从单元数据第一位，到报文末尾效验码的前一位
//            String[] unitBytes = ParseUtils.subArray(bytes, 24, bytes.length - (24 + 1));
//            if (encrypt.equals("0x02")) {
//                // 将数据单元部分，做RSA算法解密处理
//                //unitBytes = RSAUtil.decryptByPrivateKey(unitBytes, privateKey);
//            } else if (encrypt.equals("0x03")) {
//                // 将数据单元部分，AES-128位算法解密处理
//                //unitBytes = AESUtil.decryptByPrivateKey(unitBytes, privateKey);
//            }
//            // 替换已解密的单元数据部分
//            System.arraycopy(unitBytes, 0, bytes, 24, unitBytes.length);
//        }
//        // 解析校验码
//        String checkCode = bytes[bytes.length - 1];
//        // 获取校验内容：从完整报文固定0x23,0x23过后，到末尾校验码前
//        String[] checkStr = ParseUtils.subArray(bytes, 2, bytes.length - (2 + 1));
//        // 执行异或校验
//        String checkResult= BCCVerifyUtils.xorComputeResult(checkStr);
//        if(null != checkResult && checkCode.equals(checkResult)) {
//            map.put("异或校验结果", "true");
//        }else {
//            map.put("异或校验结果", "false");
//
//        }
//        // 构造函数中根据命令标识，定义时间标题
//        HashMap timeMap = new HashMap<String, String>();
//        timeMap.put("0x01", "车辆登入时间");
//        timeMap.put("0x02", "数据采集时间");
//        timeMap.put("0x03", "数据采集时间");	//补发信息义是数据采集的时间
//        timeMap.put("0x04", "车辆登出时间");
//        timeMap.put("0x05", "平台登入时间");
//        timeMap.put("0x06", "平台登出时间");
//        // 解析数据时间
//        StringBuffer time = new StringBuffer();
//        time.append("20" + Integer.valueOf(bytes[24],16));
//        time.append("-" + Integer.valueOf(bytes[25],16));
//        time.append("-" + Integer.valueOf(bytes[26],16));
//        time.append(" " + Integer.valueOf(bytes[27],16));
//        time.append(":" + Integer.valueOf(bytes[28],16));
//        time.append(":" + Integer.valueOf(bytes[29],16));
//        map.put(timeMap.get("0x" + bytes[2]), time.toString());
//
//
//    }
//}